// cf-317d
// 题意：现在有1到n(<=10^9)n个整数，有两个人Vasya和Petya轮流进行游戏，
//       Vasya先手。每次某个人选取一个还在的数x，然后将它存在的幂次方
//       (x, x^2, x^3, ...)去掉，第一个不能行动的人算输。
//
// 题解：首先发现对于每个数都有一个确定的base，base产生的集合都不会相交。
//       base就是这个数质因数分解，所有指数部分都除去指数的最大公约数就行。
//       然后可以证明两个base集合肯定不相交（因为每个数有个确定base）。
//       这个集合最多不超过29个数(2^29<10^9)。
//       假如说对于某个base，集合个数为s。现在每个集合都在单独的游戏，
//       就只和s的大小有关，我们只需要算出每个s有多少个就行。（其实
//       只需要知道奇偶就行）。
//
//       因为s很小，并且s>1的肯定base小于sqrt(n)。所以我们可以枚举sqrt(n),
//       然后对于s=1的单独维护，每次枚举到一个没枚举过的数就算下这个集合
//       大小就行。当然还有时间复杂度更低的dp算法。可以参考题解。
//
//       现在知道了每个s，我们只需要利用sg定理，就是每个s的mex的异或。
//       （画个sg图可以理解）每个s的mex值可以提前预处理（根据游戏规则，
//       从当前状态结点导出之后的状态节点，记忆化搜索就行）。
//
//
// run: $exec < input
#include <iostream>
#include <cmath>
#include <set>
#include <map>

int const maxn = 32000;
int const maxlen = 31;
int constexpr sg[] = {0, 1, 2, 1, 4, 3, 2, 1, 5, 6, 2, 1, 8, 7, 5, 9, 8, 7, 3, 4, 7, 4, 2, 1, 10, 9, 3, 6, 11, 12};
bool not_base[maxn];
bool count[maxlen];
long long n;

std::map<std::set<int>, int> _sg;

int min_not_in_mex(std::set<int> const & mex)
{
	for (int i = 0; i < maxlen; i++)
		if (mex.find(i) == mex.end()) return i;
	return maxlen;
}

int calc_sg(std::set<int> const & s)
{
	if (s.empty()) return 0;
	if (_sg.find(s) != _sg.end()) return _sg[s];
	std::set<int> mex;
	for (auto i : s) {
		auto ts = s;
		for (int j = i; j < maxlen; j += i) ts.erase(j);
		mex.insert(calc_sg(ts));
	}
	return _sg[s] = min_not_in_mex(mex);
}

int main()
{
	std::cin >> n;
	long long rn = std::sqrt(n);
	int mc = n - rn;
	count[1] ^= 1;
	for (long long i = 2; i <= rn; i++) {
		if (not_base[i]) continue;
		int len = 1;
		for (long long j = i * i; j <= n; j *= i, len++)
			if (j > rn) mc--;
			else not_base[j] = true;
		count[len] ^= 1;
	}
	count[1] ^= mc & 1;
	int game = 0;
	for (int i = 1; i < maxlen; i++)
		if (count[i] & 1) game ^= sg[i];
	std::cout << (game ? "Vasya" : "Petya") << '\n';
}

